Solid state storage devices are increasingly used for storing and accessing an increasing amount of electronic data. The number and type of solid state devices used to store and access data also continues to expand. As miniaturization and advancing technology increase the sophistication, reliability, and capacity of solid state storage devices, including solid state drives (SSD) and different types of random access memory (RAM), improved efficiencies are constantly sought for these devices. Improved efficiencies are needed because users who store data have limited resources. Limited resources may include electricity, cooling capacity, time, or physical storage space associated with read only memory (ROM) devices and RAM. ROM devices include solid state drives and other devices including programmable ROM (PROM) devices and erasable programmable ROM (EPROM) devices. SSDs and other ROM-based devices may also include devices using persistent, resistance-based, non-volatile cross point structure memory, including 3D Xpoint memory. While SSDs and other ROM-based devices are rewritable, their rewrite capability may be limited or slow compared to conventional RAM. In particular, electricity is limited and may be costly. Additionally, as more and more solid state storage devices store and access more and more data, the power and resources required to operate those devices, and to maintain the facilities in which those devices are stored, continues to increase.
Data may be protected against storage media failure, transmission failure, or other loss by storing extra copies, by storing additional redundant information, or in other ways. Erasure coding is one type of redundancy based protection. Erasure coding uses additional redundant data to produce erasure codes that protect against ‘erasures’. An erasure code (EC) allows data portions that are lost to be reconstructed from the surviving data. The application of erasure codes to data storage may typically have been for the purpose of recovering data in the face of failures of hardware elements storing the data. In some erasure codes, data may be more easily available, or systematic. In other erasure codes, data may not be directly accessible, (e.g. non-systematic) and may be less easily accessible and require more computation for recovery. The computational complexity may be a function of the approach used to compute parity data. For example, Reed-Solomon (RS) codes that compute parity data based on Galois Field arithmetic may have a higher computational cost than other approaches, including logical binary operations or approaches that are based on simple XOR operations. Similarly, it may be simpler to recover data using some types of erasure codes in which data may already be available at the time of an access request (e.g. systematic data) and it may be more complex to recover data using other types of erasure codes (e.g. non-systematic data which requires decoding). However, conventional systems may compute erasure codes without considering the complexity of encoding the data. Conventional systems may also store erasure codes without considering the complexity of recovering the data. Conventional systems may further store erasure codes without considering the energy efficiency of the storage device in which the erasure codes are stored. Thus, in conventional systems, the efficiency of encoding or recovering data based on the type of erasure code is not optimal. For example, conventional systems that store data and parity data on SSDs or in RAM do not consider properties of the parity data being written or the different energy requirements for reading or writing data at different zones on an SSD or in RAM.
Adding redundancy introduces overhead that consumes more storage capacity or transmission bandwidth, which in turn adds cost and may increase energy consumption. The overhead added by erasure code processing tends to increase as the protection level increases. Ideally, the redundant information may never need to be accessed, and thus conventional systems may group all redundancy data together and store it in some out of the way place. This one-size-fits-all approach may produce sub-optimal results, particularly concerning energy conservation.